	EditAreaLoader.prototype.get_regexp= function(text_array){
		//res="( |=|\\n|\\r|\\[|\\(|µ|)(";
		res="(\\b)(";
		for(i=0; i<text_array.length; i++){
			if(i>0)
				res+="|";
			//res+="("+ tab_text[i] +")";
			//res+=tab_text[i].replace(/(\.|\?|\*|\+|\\|\(|\)|\[|\]|\{|\})/g, "\\$1");
			res+=this.get_escaped_regexp(text_array[i]);
		}
		//res+=")( |\\.|:|\\{|\\(|\\)|\\[|\\]|\'|\"|\\r|\\n|\\t|$)";
		res+=")(\\b)";
		reg= new RegExp(res);
		
		return res;
	};
	
	
	EditAreaLoader.prototype.get_escaped_regexp= function(str){
		return str.toString().replace(/(\.|\?|\*|\+|\\|\(|\)|\[|\]|\}|\{|\$|\^|\|)/g, "\\$1");
	};

	EditAreaLoader.prototype.init_syntax_regexp = function() {
	    var lang_style = {};
	    for (var lang in this.load_syntax) {
	        if (!this.syntax[lang])	// init the regexp if not already initialized
	        {
	            this.syntax[lang] = {};
	            this.syntax[lang]["keywords_reg_exp"] = {};
	            this.keywords_reg_exp_nb = 0;

	            if (this.load_syntax[lang]['KEYWORDS']) {
	                param = "g";
	                if (this.load_syntax[lang]['KEYWORD_CASE_SENSITIVE'] === false)
	                    param += "i";
	                for (var i in this.load_syntax[lang]['KEYWORDS']) {
	                    if (typeof (this.load_syntax[lang]['KEYWORDS'][i]) == "function") continue;
	                    this.syntax[lang]["keywords_reg_exp"][i] = new RegExp(this.get_regexp(this.load_syntax[lang]['KEYWORDS'][i]), param);
	                    this.keywords_reg_exp_nb++;
	                }
	            }

	            if (this.load_syntax[lang]['OPERATORS']) {
	                var str = "";
	                var nb = 0;
	                for (var i in this.load_syntax[lang]['OPERATORS']) {
	                    if (typeof (this.load_syntax[lang]['OPERATORS'][i]) == "function") continue;
	                    if (nb > 0)
	                        str += "|";
	                    str += this.get_escaped_regexp(this.load_syntax[lang]['OPERATORS'][i]);
	                    nb++;
	                }
	                if (str.length > 0)
	                    this.syntax[lang]["operators_reg_exp"] = new RegExp("(" + str + ")", "g");
	            }

	            if (this.load_syntax[lang]['DELIMITERS']) {
	                var str = "";
	                var nb = 0;
	                for (var i in this.load_syntax[lang]['DELIMITERS']) {
	                    if (typeof (this.load_syntax[lang]['DELIMITERS'][i]) == "function") continue;
	                    if (nb > 0)
	                        str += "|";
	                    str += this.get_escaped_regexp(this.load_syntax[lang]['DELIMITERS'][i]);
	                    nb++;
	                }
	                if (str.length > 0)
	                    this.syntax[lang]["delimiters_reg_exp"] = new RegExp("(" + str + ")", "g");
	            }


	            //		/(("(\\"|[^"])*"?)|('(\\'|[^'])*'?)|(//(.|\r|\t)*\n)|(/\*(.|\n|\r|\t)*\*/)|(<!--(.|\n|\r|\t)*-->))/gi
	            var syntax_trace = [];

	            //		/("(?:[^"\\]*(\\\\)*(\\"?)?)*("|$))/g

	            this.syntax[lang]["quotes"] = {};
	            var quote_tab = [];
	            if (this.load_syntax[lang]['QUOTEMARKS']) {
	                for (var i in this.load_syntax[lang]['QUOTEMARKS']) {
	                    if (i == 'dontescape') continue;
	                    if (typeof (this.load_syntax[lang]['QUOTEMARKS'][i]) == "function") continue;
	                    var x = this.get_escaped_regexp(this.load_syntax[lang]['QUOTEMARKS'][i]);
	                    this.syntax[lang]["quotes"][x] = x;
	                    //quote_tab[quote_tab.length]="("+x+"(?:\\\\"+x+"|[^"+x+"])*("+x+"|$))";
	                    //previous working : quote_tab[quote_tab.length]="("+x+"(?:[^"+x+"\\\\]*(\\\\\\\\)*(\\\\"+x+"?)?)*("+x+"|$))";

	                    // [AB] - we don't nee backslash in xsl
	                    if (this.load_syntax[lang]['QUOTEMARKS'].dontescape)
	                        quote_tab[quote_tab.length] = "(" + x + "([^" + x + "])*(?:" + x + "|$))";
	                    else
	                        quote_tab[quote_tab.length] = "(" + x + "(\\\\.|[^" + x + "])*(?:" + x + "|$))";

	                    syntax_trace.push(x);
	                }
	            }

	            this.syntax[lang]["comments"] = {};
	            if (this.load_syntax[lang]['COMMENT_SINGLE']) {
	                for (var i in this.load_syntax[lang]['COMMENT_SINGLE']) {
	                    if (typeof (this.load_syntax[lang]['COMMENT_SINGLE'][i]) == "function") continue;
	                    var x = this.get_escaped_regexp(this.load_syntax[lang]['COMMENT_SINGLE'][i]);
	                    quote_tab[quote_tab.length] = "(" + x + "(.|\\r|\\t)*(\\n|$))";
	                    syntax_trace.push(x);
	                    this.syntax[lang]["comments"][x] = "\n";
	                }
	            }
	            // (/\*(.|[\r\n])*?\*/)
	            if (this.load_syntax[lang]['COMMENT_MULTI']) {

	                for (var i in this.load_syntax[lang]['COMMENT_MULTI']) {
	                    if (typeof (this.load_syntax[lang]['COMMENT_MULTI'][i]) == "function") continue;
	                    var start = this.get_escaped_regexp(i);
	                    var end = this.get_escaped_regexp(this.load_syntax[lang]['COMMENT_MULTI'][i]);
	                    quote_tab[quote_tab.length] = "(" + start + "(.|\\n|\\r)*?(" + end + "|$))";
	                    syntax_trace.push(start);
	                    syntax_trace.push(end);
	                    this.syntax[lang]["comments"][i] = this.load_syntax[lang]['COMMENT_MULTI'][i];
	                }
	            }
	            if (quote_tab.length > 0)
	                this.syntax[lang]["comment_or_quote_reg_exp"] = new RegExp("(" + quote_tab.join("|") + ")", "gi");

	            if (syntax_trace.length > 0) //   /((.|\n)*?)(\\*("|'|\/\*|\*\/|\/\/|$))/g
	                this.syntax[lang]["syntax_trace_regexp"] = new RegExp("((.|\n)*?)(\\\\*(" + syntax_trace.join("|") + "|$))", "gmi");

	            if (this.load_syntax[lang]['SCRIPT_DELIMITERS']) {
	                this.syntax[lang]["script_delimiters"] = {};
	                for (var i in this.load_syntax[lang]['SCRIPT_DELIMITERS']) {
	                    if (typeof (this.load_syntax[lang]['SCRIPT_DELIMITERS'][i]) == "function") continue;
	                    this.syntax[lang]["script_delimiters"][i] = this.load_syntax[lang]['SCRIPT_DELIMITERS'];
	                }
	            }

	            this.syntax[lang]["custom_regexp"] = {};
	            if (this.load_syntax[lang]['REGEXPS']) {
	                for (var i in this.load_syntax[lang]['REGEXPS']) {
	                    if (typeof (this.load_syntax[lang]['REGEXPS'][i]) == "function") continue;
	                    var val = this.load_syntax[lang]['REGEXPS'][i];
	                    if (!this.syntax[lang]["custom_regexp"][val['execute']])
	                        this.syntax[lang]["custom_regexp"][val['execute']] = {};
	                    this.syntax[lang]["custom_regexp"][val['execute']][i] = { 'regexp': new RegExp(val['search'], val['modifiers'])
																			, 'class': val['class']
	                    };
	                }
	            }

	            if (this.load_syntax[lang]['STYLES']) {
	                lang_style[lang] = {};
	                for (var i in this.load_syntax[lang]['STYLES']) {
	                    if (typeof (this.load_syntax[lang]['STYLES'][i]) == "function") continue;
	                    if (typeof (this.load_syntax[lang]['STYLES'][i]) != "string") {
	                        for (var j in this.load_syntax[lang]['STYLES'][i]) {
	                            lang_style[lang][j] = this.load_syntax[lang]['STYLES'][i][j];
	                        }
	                    } else {
	                        lang_style[lang][i] = this.load_syntax[lang]['STYLES'][i];
	                    }
	                }
	            }
	            // build style string
	            var style = "";
	            for (var i in lang_style[lang]) {
	                if (lang_style[lang][i].length > 0) {
	                    style += "." + lang + " ." + i.toLowerCase() + " span{" + lang_style[lang][i] + "}\n";
	                    style += "." + lang + " ." + i.toLowerCase() + "{" + lang_style[lang][i] + "}\n";
	                }
	            }
	            this.syntax[lang]["styles"] = style;
	        }
	    }
	};
	
	editAreaLoader.waiting_loading["reg_syntax.js"]= "loaded";
